home *** CD-ROM | disk | FTP | other *** search
/ Programming in Microsoft Windows with C# / Programacion en Microsoft Windows con C#.iso / Codigo / Pinceles y lápices / HatchBrushMenu / HatchBrushMenu.cs next >
Encoding:
Text File  |  2002-05-14  |  3.2 KB  |  96 lines

  1. //---------------------------------------------
  2. // HatchBrushMenu.cs ⌐ 2001 by Charles Petzold
  3. //---------------------------------------------
  4. using System;
  5. using System.Drawing;
  6. using System.Drawing.Drawing2D;
  7. using System.Windows.Forms;
  8.  
  9. class HatchBrushMenu: Form
  10. {
  11.      HatchStyleMenuItem hsmiChecked;
  12.       const int iMin = 0, iMax = 52;     // Valores mßximo y mφnimo de HatchStyle
  13.  
  14.      public static void Main()
  15.      {
  16.           Application.Run(new HatchBrushMenu());
  17.      }
  18.      public HatchBrushMenu()
  19.      {
  20.           Text = "Men· pincel de trama";
  21.           ResizeRedraw = true;
  22.  
  23.           Menu = new MainMenu();
  24.           Menu.MenuItems.Add("&Estilo-Trama");
  25.  
  26.           for (HatchStyle hs = (HatchStyle)iMin; hs <= (HatchStyle)iMax; hs++)
  27.           {
  28.                HatchStyleMenuItem hsmi = new HatchStyleMenuItem();
  29.  
  30.                hsmi.HatchStyle = hs;
  31.                hsmi.Click += new EventHandler(MenuHatchStyleOnClick);
  32.  
  33.                if ((int)hs % 8 == 0)
  34.                     hsmi.BarBreak = true;
  35.  
  36.                Menu.MenuItems[0].MenuItems.Add(hsmi);
  37.           }
  38.           hsmiChecked = (HatchStyleMenuItem) Menu.MenuItems[0].MenuItems[0];
  39.           hsmiChecked.Checked = true;
  40.      }
  41.      void MenuHatchStyleOnClick(object obj, EventArgs ea)
  42.      {
  43.           hsmiChecked.Checked = false;
  44.           hsmiChecked = (HatchStyleMenuItem) obj;
  45.           hsmiChecked.Checked = true;
  46.  
  47.           Invalidate();
  48.      }
  49.      protected override void OnPaint(PaintEventArgs pea)
  50.      {
  51.           Graphics grfx = pea.Graphics;
  52.  
  53.           HatchBrush hbrush = new HatchBrush(hsmiChecked.HatchStyle,
  54.                                              Color.White, Color.Black);
  55.  
  56.           grfx.FillEllipse(hbrush, ClientRectangle);
  57.      }
  58. }
  59. class HatchStyleMenuItem: MenuItem
  60. {
  61.      const    int cxImage = 32, cyImage = 32, iMargin = 2;
  62.      readonly int cxCheck, cyCheck; 
  63.  
  64.      public HatchStyle HatchStyle;
  65.  
  66.      public HatchStyleMenuItem()
  67.      {
  68.           OwnerDraw = true;
  69.  
  70.           cxCheck = SystemInformation.MenuCheckSize.Width;
  71.           cyCheck = SystemInformation.MenuCheckSize.Height;
  72.      }
  73.      protected override void OnMeasureItem(MeasureItemEventArgs miea)
  74.      {
  75.           miea.ItemWidth  = 2 * cxImage + 3 * iMargin - cxCheck;
  76.           miea.ItemHeight =     cyImage + 2 * iMargin;
  77.      }
  78.      protected override void OnDrawItem(DrawItemEventArgs diea)
  79.      {
  80.           diea.DrawBackground();
  81.  
  82.           if ((diea.State & DrawItemState.Checked) != 0)
  83.           {
  84.                 ControlPaint.DrawMenuGlyph(diea.Graphics,
  85.                                    diea.Bounds.Location.X + iMargin, 
  86.                                    diea.Bounds.Location.Y + iMargin,
  87.                                    cxImage, cyImage, MenuGlyph.Checkmark);                                                                           
  88.           }
  89.           HatchBrush hbrush = new HatchBrush(HatchStyle,
  90.                                              Color.White, Color.Black);
  91.  
  92.           diea.Graphics.FillRectangle(hbrush, 
  93.                               diea.Bounds.X + 2 * iMargin + cxImage,
  94.                               diea.Bounds.Y + iMargin, cxImage, cyImage);
  95.      }
  96. }